package mysql

import (
	//"bluebell/models"
	"crypto/md5"
	"encoding/hex"
	"lottery/web/blue/bluebell/models"
)

// 密码加密秘钥
const secretKey = "jiamipassword"

// 插入用户数据
func CreateUser(user *models.User) error {
	// 密码加密
	user.Password = encryptPassword(user.Password)
	err := db.Create(user).Error
	return err
}

// 判断用户是否存在
func CheckUserExist(username string) error {
	var count int
	err := db.Raw("select count(user_id) from users where username = ?",
		username).Scan(&count).Error
	// 返回结果
	if count > 0 {
		return ErrorUserExist
	}
	return err
}

// 对用户密码进行加密
func encryptPassword(pwd string) string {
	h := md5.New()
	h.Write([]byte(secretKey))
	// 返回16进制加密字符串
	return hex.EncodeToString(h.Sum([]byte(pwd)))
}

// 登录
func Login(user *models.User) (err error) {
	// 记录用户传递的密码
	pw := user.Password
	// 1. 查询用户 密码及user_id 存入传进来的 user
	if count := db.Table("users").
		Select("password", "user_id").
		Where("username = ?", user.Username).
		Scan(user).
		RowsAffected; count != 1 {
		return ErrorUserNotExist
	}
	// 2. 校验密码
	if encryptPassword(pw) != user.Password {
		return ErrorInvalidPassword
	}
	return nil
}

// 根据用户id获取用户信息
func GetUserById(id int64) (*models.User, error) {
	user := new(models.User)
	err := db.Table("users").
		Where("user_id = ?", id).
		Find(user).Error
	return user, err
}
